/// 设备工具类
/// 提供设备相关的工具方法
class DeviceUtils {
  /// 将蓝牙设备地址转换为设备序列号 (deviceSn)
  /// 
  /// [address] 蓝牙设备地址，格式如 "AA:BB:CC:DD:EE:FF"
  /// 返回去掉冒号的设备序列号，格式如 "AABBCCDDEEFF"
  static String convertAddressToDeviceSn(String address) {
    if (address.isEmpty) {
      return '';
    }
    
    // 移除所有冒号并转换为大写
    return address.replaceAll(':', '').toUpperCase();
  }

  /// 将设备序列号转换为蓝牙设备地址格式
  /// 
  /// [deviceSn] 设备序列号，格式如 "AABBCCDDEEFF"
  /// 返回带冒号的蓝牙地址，格式如 "AA:BB:CC:DD:EE:FF"
  static String convertDeviceSnToAddress(String deviceSn) {
    if (deviceSn.isEmpty || deviceSn.length != 12) {
      return '';
    }
    
    // 每两个字符插入一个冒号
    final formattedAddress = <String>[];
    for (int i = 0; i < deviceSn.length; i += 2) {
      if (i + 2 <= deviceSn.length) {
        formattedAddress.add(deviceSn.substring(i, i + 2));
      }
    }
    
    return formattedAddress.join(':').toUpperCase();
  }

  /// 验证蓝牙设备地址格式
  /// 
  /// [address] 蓝牙设备地址
  /// 返回是否为有效的蓝牙地址格式
  static bool isValidBluetoothAddress(String address) {
    if (address.isEmpty) {
      return false;
    }
    
    // 蓝牙地址格式：XX:XX:XX:XX:XX:XX (6组十六进制数，用冒号分隔)
    final regex = RegExp(r'^([0-9A-Fa-f]{2}:){5}[0-9A-Fa-f]{2}$');
    return regex.hasMatch(address);
  }

  /// 验证设备序列号格式
  /// 
  /// [deviceSn] 设备序列号
  /// 返回是否为有效的设备序列号格式
  static bool isValidDeviceSn(String deviceSn) {
    if (deviceSn.isEmpty || deviceSn.length < 6) {
      return false;
    }
    
    // 设备序列号格式：至少6位字母数字组合
    final regex = RegExp(r'^[0-9A-Fa-f]{6,}$');
    return regex.hasMatch(deviceSn);
  }

  /// 格式化蓝牙设备地址显示
  /// 
  /// [address] 蓝牙设备地址
  /// 返回格式化后的地址字符串
  static String formatBluetoothAddress(String address) {
    final deviceSn = convertAddressToDeviceSn(address);
    return convertDeviceSnToAddress(deviceSn);
  }

  /// 获取设备短名称
  /// 
  /// [deviceSn] 设备序列号
  /// 返回设备短名称（后6位）
  static String getDeviceShortName(String deviceSn) {
    if (deviceSn.isEmpty || deviceSn.length < 6) {
      return '';
    }
    
    return deviceSn.substring(deviceSn.length - 6).toUpperCase();
  }
}
